Hypertext Transfer Protocol (HTTP) is a stateless, Remote Procedure Call (RPC) style protocol which requires communication between client and server and follows a strict request-response pattern. HTTP streams data from either client to server or server to client. Currently, bi-directional streaming from client to server and server to client requires two transmission control protocol (TCP) connections to stream data between the client and server separately. A first TCP connection is used by the client to stream a request to the server while a second TCP connection is used by the server to stream a response to the client.
For example, for client to server communication, methods include a Hanging GET, long polling, and polling. The Hanging GET method includes a pending RPC protocol that allows the server to stream response data to the client at any time. The request from the client does not include an initial handshake request and the request does not contain data. The long polling method is similar to the Hanging GET method but the response from the server is terminated for each piece of data that the server sends to the client. The client is required to initiate a new RPC protocol to receive the next message. The polling method requires the client to poll the server by generating a new RPC protocol periodically to receive data from the server.
For example, for server to client communication, methods include sending one request at a time and a long-lived request. The sending of one request at a time method requires that the first request be sent as a handshake request that carries application-layer protocol semantics. The long-lived request method requires that a single RPC protocol continues to send request data to the server. When the streaming of request data is finished, the RPC protocol is completed.
These dual TCP connection approaches are bi-directional but are not full-duplex. Such dual TCP connection approaches incur added costs that in turn introduces added overhead. The added TCP connection consumes system and network resources. The request streaming and response streaming that each occur on different TCP connections require that both connections remain activated. This adds additional network traffic. The dual TCP connection approach also makes HTTP insufficient to be used as a standalone protocol while requiring additional application-level protocols to handle the two connections.